Novembar 2008, rešeni rok iz predmeta "Baze podataka"


fajlovi prikačeni uz rok.

U arhivi se nalaze: XML schema (.xsd), XML dokument (.xml), XQuery upit ili XPath putanja (.xq), SQL dump baze (.sql), visio 2003 dijagram (.vsd) ukoliko postoje takvi fajlovi vezani za zadatke.

XML: za sve fajlove je provereno da li su dobro oformljeni, a ako postoji i xml fajl i schema, xml fajl je validiran u odnosu na odgovarajuću šemu. Za kreiranje fajlova, proveru forme, validaciju, XPath i XQuery izraze korišćen je XML editor EditX http://www.editix.com/

SQL: baza je napravljena u MySQL-u pa prema tome SQL kod može imati netipičnu sintaksu ili funkcije različite od onih u knjizi. Upiti su provereni, prema mom shvatanju zadataka, koji često nisu baš lako shvatljivi. Najlakše je preko MySQLyog-a uraditi "restore from SQL dump" da bi mogli da probate upite nad podacima. Alati: MySQL http://www.mysql.com, MySQLyog www.webyog.com


1. zadatak

relacija:

ProjektniTim (ŠifraProjekta, JMBG, NazivProjekta, ImePrezime, PeriodAngažovanja, ŠifraSektora, NazivSektora)

funkcionalne zavisnosti:

ŠifraProjekta, JMBG --> PeriodAngažovanja, ŠifraSektora, NazivSektora, NazivProjekta, ImePrezime
ŠifraProjekta --> NazivProjekta
JMBG --> ImePrezime, ŠifraSektora, NazivSektora
ŠifraSektora --> NazivSektora
NazivSektora --> ŠifraSektora

definicije:

fukcionalna zavisnost:

u relaciji R atribut R.B (R.A i R.B mogu biti složeni) funkcionalno zavisi od atributa R.A (R.A funkcionalno određuje R.B) ako za svaku vrednost R.A postoji jedna i samo jedna vrednost R.B

potpuna funkcionalna zavisnost:

atribut R.B potpuno funkcionalno zavisi od atributa R.A ako funkcionalno zavisi od atributa R.A ali ne i od nekog pravog podskupa atributa R.A

determinanta:

determinanta je bilo koji prost ili složen atribut od koga neki drugi atribut u relaciji potpuno funkcionalno zavisi.

Boyce-Codd ova normalna forma:

Relacija R je u Boyce-Codd ovoj normalnoj formi ako su sve determinante ujedno i kandidati za ključ relacije.

determinante:

ŠifraProjekta --> NazivProjekta(D)
ŠifraSektora --> NazivSektora(D)
NazivSektora --> ŠifraSektora(D)
JMBG --> ImePrezime, ŠifraSektora, NazivSektora(D)
JMBG, ŠifraProjekta --> PeriodAngažovanja(D)(KK)

očigledno je da relacija nije u BC normalnoj formi. Dekompozicijom pri kojoj se iz relacije izvlače projekcije sa onim determinantama koje nisu kandidati za ključ, relacija se svodi na BCNF.

Projekat(ŠifraProjekta, NazivProjekta) jeste BCNF
ProjektniTim2(ŠifraProjekta, JMBG, ImePrezime, PeriodAngažovanja, ŠifraSektora, NazivSektora) nije BCNF (4D, 1KK)

dalje se dekomponuje relacija ProjektniTim2

Radnik(JMBG, ImePrezime, ŠifraSektora, NazivSektora) nije BCNF (3D, 1KK)
ProjektniTim3(ŠifraProjekta, JMBG, PeriodAngažovanja) jeste BCNF

dalje se dekomponuje relacija Radnik

Radnik2(JMBG, ImePrezime, ŠifraSektora) jeste BCNF
Sektor(ŠifraSektora, NazivSektora) jeste BCNF

konačno:

Sektor(ŠifraSektora, NazivSektora)
Radnik(JMBG, ImePrezime, ŠifraSektora)
Projekat(ŠifraProjekta, NazivProjekta)
ProjektniTim(ŠifraProjekta, JMBG, PeriodAngažovanja)


2. zadatak

a)

A (A1#, A2, B1#)

B (B1#, B2, A1#)

G (B1#, G1)

D (A1#,D1)

E (E1#, E2)

H (B1#, A1#, E1#, H1)

C (E1#, C1)

F (E1#, F1)

FF (E1#, E1#)

b)

class A (extent As key A1#){

	attribute string A1#;
	attribute string A2;
	relationship set<B> AB1 inverse B :: BA1;
	relationship B AB2 inverse B :: BA2;
};
class B (extent Bs key B1#){

	attribute string B1#;
	attribute string B2;
	attribute set<G> Gs;
	relationship A BA1 inverse A :: AB1;
	relationship set<A> BA2 inverse A :: AB2;
 relationship H BH inverse H :: HB;


};

class D extends A{

	attribute string D1;
	attribute set<H> DH inverse H :: HD;
};
class G {
	attribute string G1;
};

class H {

	attribute string H1;
	relationship B HB inverse B :: BH;
	relationship D HD inverse D :: DH;
	relationship E HE inverse E :: EH;

};

3. zadatak

Spoljno spajanje se koristi kako bi se u rezultat spajanja uključili i oni redovi koji ne zadovoljavaju uslov spajanja.

Za ilustraciju ćemo koristiti sledeće tabele:

Odeljenje

ŠifraOdeljenjaNazivOdeljenja
1Uprava
2Računski centar
3Proizvodnja

Radnik

ŠifraRadnikaImePrezimeŠifraOdeljenja
1000Pera Perić1
1001Marko Marković1
1002Žika Žikić2
1003Laza Lazić2
1004Petar Petrović

4. zadatak

U ODMGu postoje dve vrste nasleđivanja: nasleđivanje ponašanja i nasleđivanje stanja.


5. zadatak

Event-Condition-Action

Semantika ECA pravila:

Svako pravilo se donosi na određeni događaj, vrši proveru uslova po nastanku događaja i izvršava definisanu akciju ako je uslov zadovoljen. Izuzetno je moguće formirati pravilo koje se izvršava bezuslovno.

Generalno razlikujemo primitivne i složene događaje.

Primitivni doga]aji su:

Složeni događaji se formiraju kombinovanjem primitivnih i prethodno definisanih složenih događaja. Kao operatori za kombinovanje se mogu koristiti logički operatori (AND, OR, NOT), sekvence događaja, vremenske kompozicije...

Obrada ECA pravila:

a) Trenutan

Prouzrokuje prekid izvršavanja transakcije odmah po identfikovanju događaja za koji postoji definisano ECA-pravilo.

a) Odložen

Izrvšavanje pravila se odlaže do završetka transakcije koja je proizvela događaj.

a) Razdvojen

Pravilo postaje sasvim nova transakcija koja se izvršava nezavisno od polazne.


6. zadatak

a)

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
	elementFormDefault="qualified"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="
		http://www.w3.org/2001/XMLSchema
		http://www.w3.org/2001/XMLSchema.xsd">
    
    <xsd:element name="Model">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Kompanija" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:attribute name="PIB" type="xsd:ID"/>
                        <xsd:attribute name="Naziv" type="xsd:string"/>
                    </xsd:complexType>
                </xsd:element>

	    <xsd:complexType name="Letilica">
       	 	<xsd:attribute name="LID" type="xsd:ID"/>
    	    </xsd:complexType>

                <xsd:element name="Avion" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:complexContent>
                            <xsd:extension base="Letilica">
                                <xsd:attribute name="BrojSedista" type="xsd:integer"/>
                                <xsd:attribute name="BrojMotora" type="xsd:string"/>
                                <xsd:attribute name="Proizvodjac" type="xsd:IDREF" use="required"/>
                                <xsd:attribute name="Vlasnik" type="xsd:IDREF" use="required"/>
                            </xsd:extension>
                        </xsd:complexContent>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

b)

<?xml version="1.0" encoding="utf-8"?>
<Model
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="file:///D:/My%20FON/IV%20godina/I%20semestar/Baze%20podataka/BProkovi2008/jun2008/podA.xsd">
    
    <Kompanija PIB="K1" Naziv="Prince Aviation"/>
    <Kompanija PIB="K2" Naziv="Airbus"/>
    
    <Avion LID="A1" BrojSedista="50" BrojMotora="M1111" Proizvodjac="K2" Vlasnik="K2"/>
    <Avion LID="A2" BrojSedista="50" BrojMotora="M1112" Proizvodjac="K2" Vlasnik="K1"/>
    
</Model>

c)

XPath

//Avion[@Proizvodjac=@Vlasnik]

XQuery

for 
	$x in doc("podB.xml")/Model/Avion
where 
	$x/@Proizvodjac = $x/@Vlasnik
return 
	$x

7. zadatak

a)

select 
	SifraZap, Ime, Prezime, Mlb, NazivProf
from
	ZAPOSLENI join OBRAZOVNI_PROFIL using(SifraProf)
where
	StepenStrSpreme = 'V' and (((extract(year from current_date)-extract(year from DatRodj))=65 and Pol='M') or ((extract(year from current_date)-extract(year from DatRodj))=58 and Pol='Z'))

b)

select
	SifraRM, NazivRM, NazivProf
from
	RADNO_MESTO join OBRAZOVNI_PROFIL using(SifraProf)
where
	SifraRM not in (select distinct
						SifraRM
					from 
						ANGAZOVANJE)

c)

create view STATISTIKA(SIFRA_PROFILA, NAZIV_PROFILA, BR_ZAP_2007, BR_ZAP_2008, TREND) as
select
	SifraProf, 
	NazivProf, 
	sum(case when extract(year from datOd)=2007 then 1 else 0 end),
	sum(case when extract(year from datOd)=2008 then 1 else 0 end),
	case when sum(case when extract(year from datOd)=2007 then 1 else 0 end)>sum(case when extract(year from datOd)=2008 then 1 else 0 end) then 'PAD' when sum(case when extract(year from datOd)=2006 then 1 else 0 end)<sum(case when extract(year from datOd)=2007 then 1 else 0 end) then 'RAST' else 'BEZ_PROMENA' end
from
	OBRAZOVNI_PROFIL join RADNO_MESTO using(SifraProf) join ANGAZOVANJE using(SifraRM)
group by
	SifraProf, NazivProf

8. zadatak